home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Applications / Newswatcher 2.0b22 / NW Source / Source / menuutil.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-18  |  1.7 KB  |  72 lines  |  [TEXT/MMCC]

  1. /*----------------------------------------------------------------------------
  2.  
  3.     menuutil.c
  4.  
  5.     This reusable module contains routines for managing menus.
  6.     
  7.     Copyright © 1994, Northwestern University.
  8.  
  9. ----------------------------------------------------------------------------*/
  10.  
  11. #include "def.h"
  12. #include "menuutil.h"
  13.  
  14.  
  15.  
  16. /*----------------------------------------------------------------------------
  17.     AdjustOneMenu
  18.     
  19.     Adjusts the state of a single menu.
  20.     
  21.     Entry:    menuID = menu id of menu to adjust.
  22.             numCommands = number of commands in menu.
  23.             *oldStatePtr = old menu enable/disable flags.
  24.             newState = new menu enable/disable flags.
  25.             
  26.     Exit:    function result = true if menu bar must be redrawn.
  27.             *oldStatePtr = updated menu enable/disable flags.
  28. ----------------------------------------------------------------------------*/
  29.  
  30. Boolean AdjustOneMenu (short menuID, short numCommands,
  31.     unsigned long *oldStatePtr, unsigned long newState)
  32. {
  33.     unsigned long x, y, oldState;
  34.     Boolean mustRedraw = false;
  35.     short i;
  36.     MenuHandle theMenu;
  37.  
  38.     if ((newState & 0xfffffffe) == 0) {
  39.         newState = 0;
  40.     } else {
  41.         newState |= 1;
  42.     }
  43.     theMenu = GetMenuHandle(menuID);
  44.     oldState = *oldStatePtr;
  45.     if (oldState == newState) return false;
  46.     if ((newState & 1) == 0) {
  47.         if ((oldState & 1) == 0) return false;
  48.         DisableItem(theMenu, 0);
  49.         *oldStatePtr &= 0xfffffffe;
  50.         return true;
  51.     }
  52.     if ((oldState & 1) == 0) {
  53.         EnableItem(theMenu,0);
  54.         mustRedraw = true;
  55.     }
  56.     x = oldState;
  57.     y = newState;
  58.     for (i = 1 ; i <= numCommands; i++) {
  59.         x >>= 1;
  60.         y >>= 1;
  61.         if ((x & 1) != (y & 1)) {
  62.             if ((y & 1) == 0) {
  63.                 DisableItem(theMenu, i);
  64.             } else {
  65.                 EnableItem(theMenu, i);
  66.             }
  67.         }
  68.     }
  69.     *oldStatePtr = newState;
  70.     return mustRedraw;
  71. }
  72.